from selenium import webdriver
from selenium.webdriver.chrome.service import Service
from config.yaml_config import get_project_path, sep


class DriverConfig:
    @staticmethod
    def driver_config():
        """
        浏览器驱动配置
        :return: 配置好的浏览器驱动实例
        """
        options = webdriver.ChromeOptions()

        # 基础配置
        options.add_argument("disable-infobars")  # 禁用信息栏
        # options.add_argument("window-size=1920,1080")  # 设置窗口大小
        # options.add_argument("--start-fullscreen")  # 全屏启动（推荐）
        options.add_argument("--start-maximized")  # 最大化窗口，地址栏可见
        # 修复沙箱模式问题（拼写修正）
        options.add_argument("--no-sandbox")
        # 屏蔽 Chrome 冗余日志
        options.add_argument("--log-level=3")  # 只显示严重错误
        options.add_experimental_option("excludeSwitches", ["enable-logging"])  # 排除 USB 等日志

        # 禁用GPU加速（在某些环境下需要）
        options.add_argument("--disable-gpu")

        # 禁用共享内存（在Docker等环境中需要）
        options.add_argument('--disable-dev-shm-usage')

        # 无痕模式
        options.add_argument("--incognito")

        # 隐藏自动化提示
        options.add_experimental_option(
            "excludeSwitches", ["enable-automation"]
        )
        options.add_argument("--ignore-certificate-errors")
        options.add_argument("--allow-running-insecure-content")  # 允许加载不安全内容
        options.add_argument("--unsafely-treat-insecure-origin-as-secure=http://www.tcpjwtester.top")  # 强制信任该域名
        # 启用开发者工具（有助于调试）
        # options.add_argument("--auto-open-devtools-for-tabs")

        # 指定驱动
        # driver_path = r"E:\Programs\chromedriver-win64\chromedriver.exe"
        driver_path = get_project_path() + sep(['driver_files', 'chromedriver.exe'], add_sep_before=True)
        # print(driver_path)
        service = Service(executable_path=driver_path)

        # 创建驱动实例
        driver = webdriver.Chrome(
            service=service,
            options=options
        )

        # 设置隐式等待（秒）
        driver.implicitly_wait(3)  # 等待时间2秒

        # 删除所有cookies
        driver.delete_all_cookies()

        return driver


if __name__ == "__main__":
    DriverConfig().driver_config()
